package com.zenithmind.version.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 文件版本实体类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("version_file_version")
@Schema(description = "文件版本实体")
public class FileVersion extends BaseEntity {

    /**
     * 仓库ID
     */
    @Schema(description = "仓库ID")
    private String repositoryId;

    /**
     * 提交ID
     */
    @Schema(description = "提交ID")
    private String commitId;

    /**
     * 提交哈希
     */
    @Schema(description = "提交哈希")
    private String commitHash;

    /**
     * 文件路径
     */
    @Schema(description = "文件路径")
    private String filePath;

    /**
     * 版本号
     */
    @Schema(description = "版本号")
    private Integer versionNumber;

    /**
     * 文件名
     */
    @Schema(description = "文件名")
    private String fileName;

    /**
     * 文件扩展名
     */
    @Schema(description = "文件扩展名")
    private String fileExtension;

    /**
     * 文件类型（1-文本，2-二进制，3-图片，4-视频，5-音频，6-文档）
     */
    @Schema(description = "文件类型（1-文本，2-二进制，3-图片，4-视频，5-音频，6-文档）")
    private Integer fileType;

    /**
     * 文件大小（字节）
     */
    @Schema(description = "文件大小（字节）")
    private Long fileSize;

    /**
     * 文件内容哈希
     */
    @Schema(description = "文件内容哈希")
    private String contentHash;

    /**
     * 文件内容（文本文件）
     */
    @Schema(description = "文件内容（文本文件）")
    private String content;

    /**
     * 文件存储路径
     */
    @Schema(description = "文件存储路径")
    private String storagePath;

    /**
     * 变更类型（1-新增，2-修改，3-删除，4-重命名，5-移动）
     */
    @Schema(description = "变更类型（1-新增，2-修改，3-删除，4-重命名，5-移动）")
    private Integer changeType;

    /**
     * 旧文件路径（重命名或移动时）
     */
    @Schema(description = "旧文件路径（重命名或移动时）")
    private String oldFilePath;

    /**
     * 行数
     */
    @Schema(description = "行数")
    private Integer lineCount;

    /**
     * 新增行数
     */
    @Schema(description = "新增行数")
    private Integer addedLines;

    /**
     * 删除行数
     */
    @Schema(description = "删除行数")
    private Integer deletedLines;

    /**
     * 文件编码
     */
    @Schema(description = "文件编码")
    private String encoding;

    /**
     * MIME类型
     */
    @Schema(description = "MIME类型")
    private String mimeType;

    /**
     * 是否二进制文件（0-否，1-是）
     */
    @Schema(description = "是否二进制文件（0-否，1-是）")
    private Integer isBinary;

    /**
     * 是否大文件（0-否，1-是）
     */
    @Schema(description = "是否大文件（0-否，1-是）")
    private Integer isLargeFile;

    /**
     * 文件权限
     */
    @Schema(description = "文件权限")
    private String permissions;

    /**
     * 文件模式
     */
    @Schema(description = "文件模式")
    private String mode;
}
